home *** CD-ROM | disk | FTP | other *** search
- .\"
- .\" pkg-config manual page.
- .\" (C) Red Hat, Inc. based on gnome-config man page (C) Miguel de Icaza (miguel@gnu.org)
- .\"
- .
- .\" Macros to disable groff line adjustment warnings that we can't easily
- .\" fix in the text.
- .ie \n(.g \{\
- . de DW
- . nr .oldwarn \n[.warn]
- . warn 0
- . .
- . de EW
- . warn \n[.oldwarn]
- . .
- .\}
- .el \
- .\{ \
- . de DW
- . .
- . de EW
- . .
- .\}
- .
- .TH pkg-config 1
- .SH NAME
- pkg-config \- Return metainformation about installed libraries
- .SH SYNOPSIS
- .PP
- .B pkg-config
- [\-\-modversion] [\-\-help] [\-\-print-errors] [\-\-silence-errors]
- [\-\-cflags] [\-\-libs] [\-\-libs-only-L]
- [\-\-libs-only-l] [\-\-cflags-only-I]
- [\-\-variable=VARIABLENAME]
- [\-\-define-variable=VARIABLENAME=VARIABLEVALUE]
- [\-\-uninstalled]
- [\-\-exists] [\-\-atleast-version=VERSION] [\-\-exact-version=VERSION]
- [\-\-max-version=VERSION] [LIBRARIES...]
- .SH DESCRIPTION
-
- The \fIpkg-config\fP program is used to retrieve information about
- installed libraries in the system. It is typically used to compile
- and link against one or more libraries. Here is a typical usage
- scenario in a Makefile:
- .PP
- .nf
- program: program.c
- cc program.c `pkg-config --cflags --libs gnomeui`
- .fi
- .PP
-
- .PP
- \fIpkg-config\fP retrieves information about packages from
- special metadata files. These files are named after the package,
- with the extension \fI.pc\fP. By default, pkg-config looks in
- the directory \fIprefix\fP/lib/pkgconfig for these files; it will also
- look in the colon-separated (on Windows, semicolon-separated)
- list of directories specified by the
- PKG_CONFIG_PATH environment variable.
-
- .PP
- The package name specified on the \fIpkg-config\fP command line is
- defined to be the name of the metadata file, minus the \fI.pc\fP
- extension. If a library can install multiple versions simultaneously,
- it must give each version its own name (for example, GTK 1.2 might
- have the package name "gtk+" while GTK 2.0 has "gtk+-2.0").
-
- .SH OPTIONS
- The following options are supported:
- .TP
- .I "--modversion"
- Requests that the version information of the libraries specified on
- the command line be displayed. If \fIpkg-config\fP can find all the
- libraries on the command line, each library's version string is
- printed to stdout, one version per line. In this case \fIpkg-config\fP
- exits successfully. If one or more libraries is unknown,
- \fIpkg-config\fP exits with a nonzero code, and the contents of stdout
- are undefined.
- .TP
- .I "--help"
- Displays a help message and terminates.
-
- .TP
- .I "--print-errors"
- If one or more of the modules on the command line, or their
- dependencies, are not found, or if an error occurs in parsing
- a \fI.pc\fP file, then this option will cause errors explaining the
- problem to be printed. With "predicate" options such as "--exists"
- \fIpkg-config\fP runs silently by default, because it's usually used
- in scripts that want to control what's output. This option can be used
- alone (to just print errors encountered locating modules on the
- command line) or with other options. The PKG_CONFIG_DEBUG_SPEW
- environment variable overrides this option.
-
- .TP
- .I "--silence-errors"
- If one or more of the modules on the command line, or their
- dependencies, are not found, or if an error occurs in parsing a
- a \fI.pc\fP file, then this option will keep errors explaining the
- problem from being printed. With "predicate" options such as
- "--exists" \fIpkg-config\fP runs silently by default, because it's
- usually used in scripts that want to control what's output. So this
- option is only useful with options such as "--cflags" or
- "--modversion" that print errors by default. The PKG_CONFIG_DEBUG_SPEW
- environment variable overrides this option.
-
- .TP
- .I "--errors-to-stdout"
- If printing errors, print them to stdout rather than the default stderr
-
- .PP
- The following options are used to compile and link programs:
- .TP
- .I "--cflags"
- This prints pre-processor and compile flags required to compile the
- packages on the command line, including flags for all their
- dependencies. Flags are "compressed" so that each identical flag
- appears only once. \fIpkg-config\fP exits with a nonzero code if it
- can't find metadata for one or more of the packages on the command
- line.
- .TP
- .I "--libs"
- This option is identical to "--cflags", only it prints the link
- flags. As with "--cflags", duplicate flags are merged (maintaining
- proper ordering), and flags for dependencies are included in the
- output.
- .TP
- .I "--libs-only-L"
- This prints the -L/-R part of "--libs". That is, it defines the
- library search path but doesn't specify which libraries to link with.
- .TP
- .I "--libs-only-l"
- This prints the -l part of "--libs" for the libraries specified on
- the command line. Note that the union of "--libs-only-l" and
- "--libs-only-L" may be smaller than "--libs", due to flags such as
- -rdynamic.
-
- .TP
- .I "--variable=VARIABLENAME"
- This returns the value of a variable defined in a package's \fI.pc\fP
- file. Most packages define the variable "prefix", for example, so you
- can say:
- .nf
- $ pkg-config --variable=prefix glib-2.0
- /usr/
- .fi
- .TP
- .I "--define-variable=VARIABLENAME=VARIABLEVALUE"
- This sets a global value for a variable, overriding the value in any
- \fI.pc\fP files. Most packages define the variable "prefix", for
- example, so you can say:
- .nf
- $ pkg-config --print-errors --define-variable=prefix=/foo \e
- --variable=prefix glib-2.0
- /foo
- .fi
-
- .TP
- .I "--uninstalled"
- Normally if you request the package "foo" and the package
- "foo-uninstalled" exists, \fIpkg-config\fP will prefer the
- "-uninstalled" variant. This allows compilation/linking against
- uninstalled packages. If you specify the "--uninstalled" option,
- \fIpkg-config\fP will return successfully if any "-uninstalled"
- packages are being used, and return failure (false) otherwise.
- (The "PKG_CONFIG_DISABLE_UNINSTALLED" environment variable keeps
- \fIpkg-config\fP from implicitly choosing "-uninstalled" packages, so
- if that variable is set, they will only have been used if you pass
- a name like "foo-uninstalled" on the command line explicitly.)
-
- .TP
- .I "--exists"
- .TP
- .I "--atleast-version=VERSION"
- .TP
- .I "--exact-version=VERSION"
- .TP
- .I "--max-version=VERSION"
- These options test whether the package or list of packages on the
- command line are known to \fIpkg-config\fP, and optionally
- whether the version number of a package meets certain contraints.
- If all packages exist and meet the specified version constraints,
- \fIpkg-config\fP exits successfully. Otherwise it exits unsuccessfully.
-
- Rather than using the version-test options, you can simply give a version
- constraint after each package name, for example:
- .nf
- $ pkg-config --exists 'glib-2.0 >= 1.3.4 libxml = 1.8.3'
- .fi
- Remember to use \-\-print-errors if you want error messages.
-
- .TP
- .I "--msvc-syntax"
- This option is available only on Windows. It causes \fIpkg-config\fP
- to output -l and -L flags in the form recognized by the Microsoft
- Visual C++ command-line compiler, \fIcl\fP. Specifically, instead of
- \fI-Lx:/some/path\fP it prints \fI/libpath:x/some/path\fP, and instead
- of \fI-lfoo\fP it prints \fIfoo.lib\fP. Note that the --libs output
- consists of flags for the linker, and should be placed on the cl
- command line after a /link switch.
-
- .TP
- .I "--dont-define-prefix"
- This option is available only on Windows. It prevents \fIpkg-config\fP
- from automatically trying to override the value of the variable
- "prefix" in each .pc file.
-
- .TP
- .I "--prefix-variable=PREFIX"
- Also this option is available only on Windows. It sets the name of the
- variable that \fIpkg-config\fP automatically sets as described above.
-
- .TP
- .I "--static"
- Output libraries suitable for static linking. That means including
- any private libraries in the output. This relies on proper tagging in
- the .pc files, else a too large number of libraries will ordinarily be
- output.
-
- .SH ENVIRONMENT VARIABLES
-
- .TP
- .I "PKG_CONFIG_PATH"
- A colon-separated (on Windows, semicolon-separated) list of
- directories to search for .pc files. The default directory will
- always be searched after searching the path; the default is
- \fIlibdir\fP/pkgconfig:\fIdatadir\fP/pkgconfig where \fIlibdir\fP is
- the libdir where \fIpkg-config\fP and \fIdatadir\fP is the datadir
- where \fIpkg-config\fP was installed.
-
- .TP
- .I "PKG_CONFIG_DEBUG_SPEW"
- If set, causes \fIpkg-config\fP to print all kinds of
- debugging information and report all errors.
-
- .TP
- .I "PKG_CONFIG_TOP_BUILD_DIR"
- A value to set for the magic variable \fIpc_top_builddir\fP
- which may appear in \fI.pc\fP files. If the environment variable is
- not set, the default value '$(top_builddir)' will be used. This
- variable should refer to the top builddir of the Makefile where the
- compile/link flags reported by \fIpkg-config\fP will be used.
- This only matters when compiling/linking against a package that hasn't
- yet been installed.
-
- .TP
- .I "PKG_CONFIG_DISABLE_UNINSTALLED"
- Normally if you request the package "foo" and the package
- "foo-uninstalled" exists, \fIpkg-config\fP will prefer the
- "-uninstalled" variant. This allows compilation/linking against
- uninstalled packages. If this environment variable is set, it
- disables said behavior.
-
- .TP
- .I "PKG_CONFIG_ALLOW_SYSTEM_CFLAGS"
- Don't strip -I/usr/include out of cflags.
-
- .TP
- .I "PKG_CONFIG_ALLOW_SYSTEM_LIBS"
- Don't strip -L/usr/lib out of libs
-
- .TP
- .I "PKG_CONFIG_SYSROOT_DIR"
- Modify -I and -L to use the directories located in target sysroot.
- this option is usefull when crosscompiling package that use pkg-config
- to determine CFLAGS anf LDFLAGS. -I and -L are modified to point to
- the new system root. this means that a -I/usr/include/libfoo will
- become -I/var/target/usr/include/libfoo with a PKG_CONFIG_SYSROOT_DIR
- equal to /var/target (same rule apply to -L)
-
- .TP
- .I "PKG_CONFIG_LIBDIR"
- Replaces the default \fIpkg-config\fP search directory.
-
- .SH WINDOWS SPECIALITIES
- If a .pc file is found in a directory that matches the usual
- conventions (i.e., ends with \\lib\\pkgconfig), the prefix for that
- package is assumed to be the grandparent of the directory where the
- file was found, and the \fIprefix\fP variable is overridden for that
- file accordingly.
-
- In addition to the \fIPKG_CONFIG_PATH\fP environment variable, the
- Registry keys
- .DW
- \fIHKEY_CURRENT_USER\\Software\\pkgconfig\\PKG_CONFIG_PATH\fP and
- .EW
- \fIHKEY_LOCAL_MACHINE\\Software\\pkgconfig\\PKG_CONFIG_PATH\fP can be
- used to specify directories to search for .pc files. Each (string)
- value in these keys is treated as a directory where to look for .pc
- files.
-
- .SH AUTOCONF MACROS
-
- .TP
- .I "PKG_CHECK_MODULES(VARIABLE-PREFIX,MODULES[,ACTION-IF-FOUND,[ACTION-IF-NOT-FOUND]])"
-
- The macro PKG_CHECK_MODULES can be used in \fIconfigure.ac\fP to
- check whether modules exist. A typical usage would be:
- .nf
- PKG_CHECK_MODULES([MYSTUFF], [gtk+-2.0 >= 1.3.5 libxml = 1.8.4])
- .fi
-
- This would result in MYSTUFF_LIBS and MYSTUFF_CFLAGS substitution
- variables, set to the libs and cflags for the given module list.
- If a module is missing or has the wrong version, by default configure
- will abort with a message. To replace the default action,
- specify an ACTION-IF-NOT-FOUND. PKG_CHECK_MODULES will not print any
- error messages if you specify your own ACTION-IF-NOT-FOUND.
- However, it will set the variable MYSTUFF_PKG_ERRORS, which you can
- use to display what went wrong.
-
- Note that if there is a possibility the first call to
- PKG_CHECK_MODULES might not happen, you should be sure to include an
- explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-
- .I "PKG_PROG_PKG_CONFIG([MIN-VERSION])"
-
- Defines the PKG_CONFIG variable to the best pkg-config available,
- useful if you need pkg-config but don't want to use PKG_CHECK_MODULES.
-
- .I "PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])"
-
- Check to see whether a particular set of modules exists. Similar
- to PKG_CHECK_MODULES(), but does not set variables or print errors.
-
- Similar to PKG_CHECK_MODULES, make sure that the first instance of
- this or PKG_CHECK_MODULES is called, or make sure to call
- PKG_CHECK_EXISTS manually
-
- .SH METADATA FILE SYNTAX
- To add a library to the set of packages \fIpkg-config\fP knows about,
- simply install a \fI.pc\fP file. You should install this file to
- \fIlibdir\fP/pkgconfig.
-
- .PP
- Here is an example file:
- .nf
- # This is a comment
- prefix=/home/hp/unst # this defines a variable
- exec_prefix=${prefix} # defining another variable in terms of the first
- libdir=${exec_prefix}/lib
- includedir=${prefix}/include
-
- Name: GObject # human-readable name
- Description: Object/type system for GLib # human-readable description
- Version: 1.3.1
- URL: http://www.gtk.org
- Requires: glib-2.0 = 1.3.1
- Conflicts: foobar <= 4.5
- Libs: -L${libdir} -lgobject-1.3
- Libs.private: -lm
- Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib/include
- .fi
-
- .PP
- You would normally generate the file using configure, of course, so
- that the prefix, etc. are set to the proper values.
-
- .PP
- Files have two kinds of line: keyword lines start with a keyword plus
- a colon, and variable definitions start with an alphanumeric string
- plus an equals sign. Keywords are defined in advance and have special
- meaning to \fIpkg-config\fP; variables do not, you can have any
- variables that you wish (however, users may expect to retrieve the
- usual directory name variables).
-
- .PP
- Note that variable references are written "${foo}"; you can escape
- literal "${" as "$${".
-
- .TP
- .I "Name:"
- This field should be a human-readable name for the package. Note that
- it is not the name passed as an argument to \fIpkg-config\fP.
- .TP
- .I "Description:"
- This should be a brief description of the package
- .TP
- .I "URL:"
- An URL where people can get more information about and download the package
- .TP
- .I "Version:"
- This should be the most-specific-possible package version string.
- .TP
- .I "Requires:"
- This is a comma-separated list of packages that are required by your
- package. Flags from dependent packages will be merged in to the flags
- reported for your package. Optionally, you can specify the version
- of the required package (using the operators =, <, >, >=, <=);
- specifying a version allows \fIpkg-config\fP to perform extra sanity
- checks. You may only mention the same package one time on the
- .I "Requires:"
- line. If the version of a package is unspecified, any version will
- be used with no checking.
- .TP
- .I "Conflicts:"
- This optional line allows \fIpkg-config\fP to perform additional
- sanity checks, primarily to detect broken user installations. The
- syntax is the same as
- .I "Requires:"
- except that
- you can list the same package more than once here, for example
- "foobar = 1.2.3, foobar = 1.2.5, foobar >= 1.3", if you have reason to
- do so. If a version isn't specified, then your package conflicts with
- all versions of the mentioned package.
- If a user tries to use your package and a conflicting package at the
- same time, then \fIpkg-config\fP will complain.
- .TP
- .I "Libs:"
- This line should give the link flags specific to your package.
- Don't add any flags for required packages; \fIpkg-config\fP will
- add those automatically.
-
- .TP
- .I "Libs.private:"
- This line should list any private libraries in use. Private libraries
- are libraries which are not exposed through your library, but are
- needed in the case of static linking.
-
- .TP
- .I "Cflags:"
- This line should list the compile flags specific to your package.
- Don't add any flags for required packages; \fIpkg-config\fP will
- add those automatically.
-
- .SH AUTHOR
-
- \fIpkg-config\fP was written by James Henstridge, rewritten by Martijn
- van Beers, and rewritten again by Havoc Pennington. Tim Janik, Owen
- Taylor, and Raja Harinath submitted suggestions and some code.
- \fIgnome-config\fP was written by Miguel de Icaza, Raja Harinath and
- various hackers in the GNOME team. It was inspired by Owen Taylor's
- \fIgtk-config\fP program.
-
- .SH BUGS
-
- \fIpkg-config\fP does not handle mixing of parameters with and without
- = well. Stick with one.
-